预训练阶段语言模型在网络上学了很多东西,却不知道使用方法

而在微调阶段会让语言模型接收人类老师的教导,发挥它的潜力

指令

![[Pasted image 20250730213913.png]]

为什么要标注出用户和 AI 呢?

![[Pasted image 20250730214525.png]]

![[Pasted image 20250730214640.png]]

所以 ChatGPT 不是以“你是谁”进行文字接龙的,而是“USER:你是谁 AI:”进行文字接龙

微调

第二阶段微调成功的关键是用第一阶段预训练的参数初始化

![[Pasted image 20250731122736.png]]

因为是用预训练的参数作为初始化参数,所以微调过程的最佳化产生的参数不会和预训练的参数差太多

为什么说微调成功的关键是用预训练的参数初始化?

  1. 预训练的资料量相当大,最佳化找出来的参数不会太差

不会仅凭简单的规则做文字接龙,如:看到“最”就答“玉山”这样的简单找出来的参数是通不过海量数据验证的

  1. 很强的举一反三能力

例如在多种语言上做预训练后,只要教某一个语言的某一个任务,模型自动学会其他语言的同样任务

![[Pasted image 20250731131340.png]]

Adapter

例如:LoRA

Adapter 是指微调最佳化过程中不改变预训练的参数,而是新加少量参数,微调最佳化的过程是找寻这些新加少量未知参数的值

![[Pasted image 20250731123312.png]]

这样做的好处是:

  1. 不改变预训练的参数,避免微调导致模型改变太多(如变差、不稳定、不受控)
  2. 减少微调最佳化的运算量(只需要找少量的参数,而不是全部的参数)

各种 Adapter:随着插入新参数的位置不同、数量不同,有各种各样的 Adapter,LoRA 只是其中一种

微调的路线分成了两条

![[Pasted image 20250731131731.png]]

如:BERT 系列

世界上有这么多任务,要把每一个任务微调一个模型吗?太麻烦了

直接打造一个通才,一劳永逸解决所有任务,让模型做什么任务,直接告诉它

![[Pasted image 20250731132253.png]]

不一定一次使用很多类型的任务,也可以逐步微调,如先学习翻译、再学习编修

![[Pasted image 20250731132649.png]]

但是微调的资料标注多了,它会忘记之前的资料,就需要让模型进行复习,如何进行复习:

通才更发挥模型的举一反三能力:

![[Pasted image 20250731133317.png]]

从上图可以看出:训练的任务越多,模型在没见过的任务上的表现越好

对于 PaLM 540B,指令微调只需要 0.2% 的预训练计算量

指令微调是画龙点睛

指令微调并不需要太多的资料量

我自己也能做指令微调吗?

  1. 没有高品质的资料标注

OpenAI 有大量的线上使用者,所以知道用户会问什么问题

有人提出可以对 ChatGPT 做逆向工程,看看 ChatGPT 用了什么微调资料

![[Pasted image 20250731205518.png]]

不过下面的文献指出通过这种方式获得的微调资料并没有很优质,不过有总比没有好

  1. 没有预训练完成的模型参数

Meta 开源了 LLaMA

两个问题解决后,现在人人都可以 fine-tune 大型语言模型的时代开始了!